package generator;

import org.eclipse.uml2.uml.Element;
import java.util.Properties;

public class JpaEntityMappedSuperclassTemplateClass extends BaseTemplateClass {


	public JpaEntityMappedSuperclassTemplateClass(Properties properties) {
		super(properties);
	}

	public boolean isProcessable() {
		return isExtended();
	}

	public void setElement(Element ele) {
		this.element = ele;
		returningString = new StringBuilder();
	}

	protected String _returning() {
		returningString.append("@MappedSuperclass");

		return returningString.toString();
	}
	/**
	 * Indica si la clase especificada es extendida por alguna otra clase.
	 * @return
	 */
	public boolean isExtended() {
		org.eclipse.uml2.uml.Class cls = (org.eclipse.uml2.uml.Class) element;
		// busco las asociaciones que son Generalization
		for (org.eclipse.uml2.uml.Relationship r : cls.getRelationships()) {
			if (r instanceof org.eclipse.uml2.uml.Generalization) {
				org.eclipse.uml2.uml.Generalization gen = (org.eclipse.uml2.uml.Generalization) r;
				if (gen.getGeneral().equals(cls)) {
					// si en la relación, la clase general coincide con la
					// pasada por parámetro
					if (gen.getGeneral().getGeneralizations().size() == 0) {
						// y esa clase, además no extiende a alguna otra
						return true;
					}
				}
			}
		}
		return false;
	}
	
}